import { DomUtils } from '../utils/DomUtils';

/**
 * 博客园(https://www.cnblogs.com)网页优化
 */
export class Cnblogs {

    static hostname = 'www.cnblogs.com';

    main(pathname) {
        if (!pathname) return;
    
        // 首页不处理
        if (pathname === '/') return;

        // TODO: 测试代码
        const styleList = document.querySelectorAll('link[rel="stylesheet"');
        const styleLinkList = Array.from(styleList).map(item => item.getAttribute('href'));
        console.log('TEST: ', styleLinkList);

        // 遍历当前对象上的所有函数，根据函数找到匹配的样式和函数
        Object.getOwnPropertyNames(Object.getPrototypeOf(this))
            .filter(item => !(['constructor', 'main', 'commonHandler'].includes(item)))
            .some(item => {
                const link = document.querySelector(`link[href*="${item}"]`);
                if (!link) return false;

                // 通用样式处理
                this.commonHandler();
                // 自定义样式处理
                const isDevelopment = this[item]();
                if (!isDevelopment) {
                    DomUtils.setBackground();
                }
                return true;
            });
    }

    /**
     * 处理 darkgreentrip 主题
     * - 主题地址：https://b.cnblogs.com/SkinUser.aspx?SkinName=darkgreentrip
     * - 测试网页：https://www.cnblogs.com/loong-hon/p/10256686.html
     */
    darkgreentrip() {
        DomUtils.setCss('#main', { padding: 0 });
        DomUtils.setCss('#mainContent', { width: '900px', margin: '0 auto', float: 'none', display: 'block' });
        DomUtils.setCss('#mainContent > .forFlow', { margin: 0 });
        DomUtils.setCss(document.body, { padding: '20px 0' });
        DomUtils.setCss('#blog-comments-placeholder', { 
            backgroundColor: '#fff', padding: '0 20px 20px', borderRadius: '10px' 
        });
    }

    /**
     * 处理博主 zhangwenju 的页面
     * - 测试网页：https://www.cnblogs.com/zhangwenju/p/17136502.html
     */
    zhangwenju() {
        DomUtils.hide(['.esa-sponsor', '#post_next_prev', '.github-corner']);
        DomUtils.setCss('#mainContent', {
            width: '900px',
            margin: 0,
            padding: '20px',
            borderRadius: '10px',
            backgroundColor: 'var(--blog-bg-color)',
            float: 'none',
            boxSizing: 'border-box'
        });
    }

    /**
     * 处理 book 主题
     * - 主题地址：https://b.cnblogs.com/SkinUser.aspx?SkinName=BOOK
     * - 测试网页：https://www.cnblogs.com/xiaoxiaoshen/p/5191186.html
     */
    book() {
        DomUtils.hide(['#rightmenu', '#MySignature', '#blog_post_info_block']);
        DomUtils.setCss('#main', { 
            width: '900px', margin: '0 auto', borderRadius: '10px', 
            backgroundColor: '#fff', position: 'unset', padding: '5px 20px 20px'
        });
        DomUtils.setCss(document.body, { padding: '20px 0' });
        DomUtils.setCss('.postfoot', { textAlign: 'right' });
    }

    /**
     * 处理 blacksun 主题
     * - 主题地址：https://b.cnblogs.com/SkinUser.aspx?SkinName=BlackSun
     * - 测试网页：
     *      - https://www.cnblogs.com/guanxinjing/p/10396208.html
     *      - https://www.cnblogs.com/bwhou/p/18591973
     */
    blacksun() {
        DomUtils.hide([
            '#top',
            '#leftmenu',
            '#MySignature',
            '#blog_post_info_block'
        ]);
        DomUtils.setCss('#maintable', { width: '900px', margin: '0 auto', borderRadius: '10px', overflow: 'hidden' });
        DomUtils.setCss('.post', { border: 'none' });
        DomUtils.setCss('.postfoot', { textAlign: 'right' });
        DomUtils.setCss(document.body, { padding: '20px 0', boxSizing: 'border-box' });
    }

    /**
     * 处理 loveisintheair 主题
     * - 主题地址：https://b.cnblogs.com/SkinUser.aspx?SkinName=LoveIsIntheAir
     * - 测试网页：
     *      - https://www.cnblogs.com/chenxd/p/7819233
     */
    loveisintheair() {
        DomUtils.setCss('#topicList', {
            width: '900px', padding: '20px', borderRadius: '10px',
            backgroundColor: '#fff', float: 'none'
        });
        DomUtils.setCss('center', { paddingBottom: '20px'});
    }

    /**
     * 处理 sea 主题
     * - 主题地址：https://b.cnblogs.com/SkinUser.aspx?SkinName=sea
     * - 测试网页：
     *      - https://www.cnblogs.com/lingdu98/p/18758660
     */
    sea() {
        DomUtils.hide(['#leftcontent', '#mytopmenu', '.footer']);
        DomUtils.setCss('#centercontent', { width: '900px', margin: '20px auto', padding: 0, borderRadius: '10px', overflow: 'hidden' });
        DomUtils.setCss(document.body, { minHeight: 'auto' });
    }

    /**
     * 处理 blacklowkey 主题
     * - 主题地址：https://b.cnblogs.com/SkinUser.aspx?SkinName=BlackLowKey
     * - 测试网页：
     */
    blacklowkey() {
        DomUtils.setCss('#mainContent', {
            width: '900px', margin: '20px auto', padding: '20px', borderRadius: '10px',
            float: 'none', boxSizing: 'border-box',
        });
        DomUtils.setCss('#main', { minWidth: '900px', width: '900px', borderRadius: '10px' });
        DomUtils.setCss('#home', { width: '900px', paddingBottom: '10px' });
        // 标题字体放大
        DomUtils.setCss('#cb_post_title_url', { fontSize: '24px' });
    }

    /**
     * 通用处理函数
     */
    commonHandler() {
        DomUtils.hide([
            // 顶部的两个导航栏
            '#top_nav',
            '#header',
            // 右侧边栏
            '#sideBar',
            // 文章下面的 点赞、关注、收藏、分享 按钮组
            '#blog_post_info',
            // 评论输入框
            '#comment_form',
            // 页脚
            '#footer',
            '#blog_post_info_block'
        ]);
        // 标题字体放大
        DomUtils.setCss('#cb_post_title_url', { fontSize: '24px' });
        // 设置背景
        // DomUtils.setBackground();
    }

    /**
     * 处理 coffee 主题
     * - 主题地址：https://b.cnblogs.com/SkinUser.aspx?SkinName=coffee
     * - 测试网页：
     *      - https://www.cnblogs.com/PeachyGalaxy/p/18721117
     *      - https://www.cnblogs.com/learnForLife/p/18759670
     */
    coffee() {
        DomUtils.hide('#navigator');
        DomUtils.setCss('#mainContent', {
            width: '900px',
            margin: '20px auto',
            float: 'none',
            borderRadius: '10px',
        });
        DomUtils.setCss('#mainContent .forFlow', { margin: 0 });
        DomUtils.setCss('#main', { paddingBottom: '1px' });
        // 标题字体放大
        DomUtils.setCss('#cb_post_title_url', { fontSize: '24px' });
    }

    /**
     * 处理 lessismoreright 主题
     * - 主题地址：https://b.cnblogs.com/SkinUser.aspx?SkinName=LessIsMoreRight
     * - 测试网页：
     *      - https://www.cnblogs.com/rush-peng/p/18717283
     *      - https://www.cnblogs.com/Dongmy/p/18766570
     */
    lessismoreright() {
        DomUtils.setCss('#mainContent', {
            width: '900px', margin: '20px auto', padding: '20px', borderRadius: '10px',
            backgroundColor: '#fff', 
        });
        DomUtils.setCss('#mainContent .forFlow', { margin: 0 });
        DomUtils.setCss(document.body, { minHeight: 'auto' });
        // 标题字体放大
        DomUtils.setCss('#cb_post_title_url', { fontSize: '24px' });
        DomUtils.setCss('#mainContent .postTitle', { margin: 0 });
    }

    /**
     * 处理 red_autumnal_leaves 主题
     * - 主题地址：https://b.cnblogs.com/SkinUser.aspx?SkinName=red_autumnal_leaves
     * - 测试网页：
     *     - https://www.cnblogs.com/cdaniu/p/15434481.html
     *     - https://www.cnblogs.com/haoee/p/18764302
     */
    red_autumnal_leaves() {
        DomUtils.hide([
            '#top_nav', 
            '#header',
            '#sideBar',
            '#blog_post_info_block',
            '#comment_form',
            '#footer',
            '#page_end_html'
        ]);
        // 文章居中
        DomUtils.setCss('#home', { 
            width: '900px', margin: '20px auto', padding: 0,
            borderRadius: '10px', backgroundImage: 'none',
            overflow: 'hidden'
        });
        DomUtils.setCss('#main', { marginTop: 0 });
        DomUtils.setCss('#topics .postDesc', { 
            margin: 0, width: '900px', float: 'none',
            boxSizing: 'border-box', padding: '20px 20px 10px 20px'
        });
        DomUtils.setCss('#topics', { width: '900px', borderRadius: '10px' });
    }

    /**
     * 处理 winxpblue 主题
     * - 主题地址：https://b.cnblogs.com/SkinUser.aspx?SkinName=WinXPBlue
     * - 测试网页：
     *     - https://www.cnblogs.com/xmit/p/18179640
     *     - https://www.cnblogs.com/testtraveler/p/18762236
     */
    winxpblue() {
        DomUtils.hide([
            '#top_nav', '#top',
            '#leftmenu', 
            '#blog_post_info_block',
            '#comment_form',
            '#footer'
        ]);
        // 文章居中
        DomUtils.setCss('#main', { width: '900px', margin: '20px auto', borderRadius: '10px', padding: '20px' });
        // 标题字体放大
        DomUtils.setCss('#cb_post_title_url', { fontSize: '24px' });
    }

    /**
     * 处理 mountainink 主题
     * - 主题地址：https://b.cnblogs.com/SkinUser.aspx?SkinName=MountainInk
     * - 测试网页：
     *     - https://www.cnblogs.com/xiao-ba-bi/articles/14522062.html
     *     - https://www.cnblogs.com/yarightok/p/18090524
     */
    mountainink() {
        DomUtils.hide([
            // 顶部header
            '#top_nav', '#header',
            // 左侧边栏
            '#sideBar',
            // 文章下面的相关信息
            '#blog_post_info_block',
            // 评论输入框和下面的文章推荐区域
            '#comment_form',
            // 页脚
            '#footer'
        ]);
        // 文章居中
        DomUtils.setCss('#home', { 
            width: '900px', borderRadius: '10px', overflow: 'hidden',  
            position: 'unset', margin: '20px auto', padding: '20px 20px 20px 0',
            backgroundImage: 'none'
        });
        DomUtils.setCss('#main', { width: '100%' });
        DomUtils.setCss('#mainContent', { width: '100%' });
        DomUtils.setCss('#topics', { width: '100%' });
        DomUtils.setCss('#topics .postTitle', { width: '100%', marginBottom: '20px' });
        DomUtils.setCss('#topics .postTitle a', { fontSize: '21px', fontWeight: 'bold', color: '#000' });
        DomUtils.setCss('#topics .postBody', { width: '100%' });
        DomUtils.setCss('#topics .postDesc', { width: '100%' });
    }

    /**
     * 处理 simpleblue 主题
     * - 测试网页：https://www.cnblogs.com/ai888/p/18672045
     * - 主题地址：https://b.cnblogs.com/SkinUser.aspx?SkinName=SimpleBlue
     */
    simpleblue() {
        DomUtils.hide([
            // 顶部的两个导航栏
            '#top_nav', '#header',
            // 左侧边栏
            '#sideBar',
            // 文章下面的相关信息
            '#blog_post_info_block',
            // 评论输入框和下面的文章推荐区域
            '#comment_form'
        ]);
        // 文章居中
        DomUtils.setCss('#mainContent', { 
            width: '900px', margin: '20px auto', 
            borderRadius: '10px', overflow: 'hidden' 
        });
        DomUtils.setCss('#mainContent > .forFlow', { border: 'none' });
        // 放大标题
        DomUtils.setCss('#cb_post_title_url', { fontSize: '24px' });
    }

    /**
     * 处理 bluesky 主题
     * - 测试网页：https://www.cnblogs.com/yayujs/p/18740366
     */
    bluesky() {
        DomUtils.hide([
            // 顶部的两个导航栏
            '#top_nav',
            '#header',
            // 右侧边栏
            '#sideBar',
            // 文章下面的 点赞、关注、收藏、分享 按钮组
            '#blog_post_info',
            // 评论输入框
            '#comment_form',
            // 页脚
            '#footer'
        ]);
        DomUtils.setCss('#main', { marginTop: 0, width: '900px', borderRadius: '10px', overflow: 'hidden' });
        DomUtils.setCss('#home', { padding: '20px 0' });
        DomUtils.setCss('#topics > .post', { paddingBottom: 0 });
    }

    /**
     * 处理 codinglife 主题
     */
    codinglife() {
        DomUtils.remove([
            '#top_nav',
            '#header',
            '#sideBar',
            '#footer',
            '#blog_post_info_block',
            '#blog_c1',
            '#cnblogs_ch',
            '#comment_form_container',
            '#under_post_card2',
            '#HistoryToday',
            '#comment_nav'
        ]);

        DomUtils.setCss('#mainContent', { maxWidth: '1000px', flex: 1, margin: '0 auto' });
        DomUtils.setCss('html', { height: 'auto'});

        DomUtils.observe('#under_post_card1', ['childList'], { childList: true }, ({ observer, mutationsList }) => {
            mutationsList.forEach(mutation => {
                if (mutation.addedNodes && mutation.addedNodes.length) {
                    DomUtils.setCss('#under_post_card1 .under-post-card', { maxWidth: 'none'});
                    observer.disconnect();
                }
            });
        });
    }

    /**
     * 处理 simplememory 主题
     */
    simplememory() {
        DomUtils.remove([
            // 右侧边栏
            '#sideBar',
            // 捐赠二维码
            '#MySignature',
            '#footer',
            '#page_end_html'
        ]);
        DomUtils.setCss('#home', {
            width: '1000px',
            'border-radius': '10px',
            overflow: 'hidden',
            margin: '20px auto'
        });
        DomUtils.setCss('body', { paddingBottom: '20px' });
        DomUtils.setCss('#mainContent', { marginLeft: 0 });
        DomUtils.setCss('#mainContent .forFlow', { marginLeft: 0 });
    }
}